/**
 * Core_printf.cpp - 核心模块打印函数实现
 * 提供基于状态的条件打印功能
 */
#include "Core.h"
#include <stdio.h>
#include <stdarg.h>

// 全局打印开关
static int bsp_global_print_enabled = 1;

// 设置全局打印开关
void BSP_SetGlobalPrintEnable(int enable)
{
    bsp_global_print_enabled = enable;
}

// 基于状态的打印函数
void BSP_Printf(BSP_PrintStatus status, const char *format, ...)
{
    // 检查是否允许打印
    int should_print = 0;
    
    if (status == BSP_PRINT_ALWAYS) {
        // 总是打印，不受全局开关影响
        should_print = 1;
    } else if (status == BSP_PRINT_OK && bsp_global_print_enabled) {
        // 仅当状态为OK且全局开关开启时打印
        should_print = 1;
    }
    
    // 如果允许打印，则执行打印操作
    if (should_print) {
        va_list args;
        va_start(args, format);
        vprintf(format, args);
        va_end(args);
    }
}

// 示例使用的结构体
typedef struct {
    char name[50];
    int status;
} ME_TEST;

// 示例函数
void example_usage_Coreprintf()
{
    // 定义状态常量
    BSP_PrintStatus ME_OK = BSP_PRINT_OK;
    BSP_PrintStatus ME_UNOK = BSP_PRINT_UNOK;
    BSP_PrintStatus ME_ALWAYS = BSP_PRINT_ALWAYS;
    
    // 示例数据
    ME_TEST metest = {"TEST_DEVICE", 1};
    
    // 使用示例
    BSP_Printf(ME_OK, "打印状态为OK: 设备名称: [%s]\n", metest.name);
    BSP_Printf(ME_UNOK, "打印状态为UNOK: 这行不会显示\n");
    BSP_Printf(ME_ALWAYS, "打印状态为ALWAYS: 这行总是会显示\n");
}
